Rx-Http-Request
The world-famous HTTP client Request now RxJS compliant, wrote in full Typescript | ES6 for client and server side.
Table of contents
Installation
$ npm install --save @akanass/rx-http-request rxjs
or
$ yarn add @akanass/rx-http-request rxjs
Super simple to use
Rx-Http-Request is designed to be the simplest way possible to make http calls.
It's fully Typescript
| ES6
wrotten so you can import it :
import {RxHR} from "@akanass/rx-http-request";
or use CommonJS
:
const RxHR = require('@akanass/rx-http-request').RxHR;
Now, it's easy to perform a HTTP
request:
RxHR.get('http://www.google.fr').subscribe(
(data) => {
if (data.response.statusCode === 200) {
console.log(data.body);
}
},
(err) => console.error(err)
);
Browser compatibility
Rx-Http-Request can be used in your favorite browser to have all features in your own front application.
Just import browser/index.js
script and enjoy:
<script src="node_modules/@akanass/rx-http-request/browser/index.js" type="application/javascript"></script>
<script type="application/javascript">
const RxHR = rhr.RxHR;
RxHR.get('http://www.google.fr').subscribe(
function(data){
if (data.response.statusCode === 200) {
console.log(data.body);
}
},
function(err){
console.error(err)
}
);
</script>
Browser version is a standalone version so you just need to copy/paste
file from node_modules/@akanass/rx-http-request/browser/index.js
when you want to create your bundle and change path to it.
Build your project with Webpack
If you want to include this library inside a project builds with webpack
for a client
application, you must add this configuration inside your webpack configuration
:
{
target: "web",
node: {
fs: "empty",
net: "empty",
tls: "empty"
}
}
For a server
application, target
will be node
, node
block in configuration doesn't exist and uglify
plugin must be disabled
.
API in Detail
Rx-Http-Request uses Request API to perform calls and returns RxJS.Observable.
All options to pass to API methods can be found here.
All methods to execute on response object can be found here.
.request
Returns the original Request API to perform calls without RxJS.Observable
response but with a callback method.
import {RxHR} from '@akanass/rx-http-request';
RxHR.request({uri: 'http://www.google.fr'}, (error, response, body) => {
if (!error && response.statusCode == 200) {
console.log(body);
}
});
Back to top
.defaults(options)
This method returns a wrapper around the normal Rx-Http-Request API that defaults to whatever options you pass to it.
Parameters:
options (required): Original Request options
object with default values foreach next requests
Response:
new RxHttpRequest
instance
Note: RxHR.defaults()
does not modify the global API; instead, it returns a wrapper that has your default settings applied to it.
Note: You can call .defaults()
on the wrapper that is returned from RxHR.defaults()
to add/override defaults that were previously defaulted.
For example:
const baseRequest = RxHR.defaults({
headers: {'x-token': 'my-token'}
});
const specialRequest = baseRequest.defaults({
headers: {special: 'special value'}
});
Back to top
.get(uri[, options])
Performs a request with get
http method.
Parameters:
- uri (required): The
uri
where request will be performed - options (optional): Original Request
options
object
Response:
RxJS.Observable instance
Crawl a webpage
import {RxHR} from '@akanass/rx-http-request';
RxHR.get('http://www.google.fr').subscribe(
(data) => {
if (data.response.statusCode === 200) {
console.log(data.body);
}
},
(err) => console.error(err)
);
GET something from a JSON REST API
import {RxHR} from '@akanass/rx-http-request';
const options = {
qs: {
access_token: 'xxxxx xxxxx'
},
headers: {
'User-Agent': 'Rx-Http-Request'
},
json: true
};
RxHR.get('https://api.github.com/user/repos', options).subscribe(
(data) => {
if (data.response.statusCode === 200) {
console.log(data.body);
}
},
(err) => console.error(err)
);
Back to top
.getBuffer(uri[, options])
Performs a request with get
http method and returns a buffer in response body. Very useful to crawl data from a stream.
Parameters:
- uri (required): The
uri
where request will be performed - options (optional): Original Request
options
object
Response:
RxJS.Observable instance
GET a buffer image
import {RxHR} from '@akanass/rx-http-request';
RxHR.getBuffer('https://portalstoragewuprod2.azureedge.net/vision/Analysis/1-1.jpg').subscribe(
(data) => {
if (data.response.statusCode === 200) {
console.log(data.response.headers['content-type']);
console.log(data.body);
}
},
(err) => console.error(err)
);
Back to top
.post(uri[, options])
Performs a request with post
http method.
Parameters:
- uri (required): The
uri
where request will be performed - options (optional): Original Request
options
object
Response:
RxJS.Observable instance
POST data to a JSON REST API
import {RxHR} from '@akanass/rx-http-request';
const options = {
body: {
some: 'payload'
},
json: true
};
RxHR.post('http://posttestserver.com/posts', options).subscribe(
(data) => {
if (data.response.statusCode === 201) {
console.log(data.body);
}
},
(err) => console.error(err)
);
POST like HTML forms do
import {RxHR} from '@akanass/rx-http-request';
const options = {
form: {
some: 'payload'
},
headers: {
}
};
RxHR.post('http://posttestserver.com/posts', options).subscribe(
(data) => {
if (data.response.statusCode === 201) {
console.log(data.body);
}
},
(err) => console.error(err)
);
Back to top
.put(uri[, options])
Performs a request with put
http method.
Parameters:
- uri (required): The
uri
where request will be performed - options (optional): Original Request
options
object
Response:
RxJS.Observable instance
import {RxHR} from '@akanass/rx-http-request';
RxHR.put(uri).subscribe(...);
Back to top
.patch(uri[, options])
Performs a request with patch
http method.
Parameters:
- uri (required): The
uri
where request will be performed - options (optional): Original Request
options
object
Response:
RxJS.Observable instance
import {RxHR} from '@akanass/rx-http-request';
RxHR.patch(uri).subscribe(...);
Back to top
.delete(uri[, options])
Performs a request with delete
http method.
Parameters:
- uri (required): The
uri
where request will be performed - options (optional): Original Request
options
object
Response:
RxJS.Observable instance
import {RxHR} from '@akanass/rx-http-request';
RxHR.delete(uri).subscribe(...);
Back to top
.head(uri[, options])
Parameters:
- uri (required): The
uri
where request will be performed - options (optional): Original Request
options
object
Response:
RxJS.Observable instance
Performs a request with head
http method.
import {RxHR} from '@akanass/rx-http-request';
RxHR.head(uri).subscribe(...);
Back to top
.jar()
Creates a new RxCookieJar
instance
Response:
RxJS.Observable instance
import {RxHR} from '@akanass/rx-http-request';
RxHR.jar().subscribe(...);
Back to top
.cookie(str)
Creates a new cookie
Parameters:
- str (required): The
string
representation of the cookie
Response:
RxJS.Observable instance
import {RxHR} from '@akanass/rx-http-request';
RxHR.cookie('key1=value1').subscribe(...);
Back to top
Contributing
To set up your development environment:
- clone the repo to your workspace,
- in the shell
cd
to the main folder, - hit
npm or yarn install
, - run
npm or yarn run test
.
- It will lint the code and execute all tests.
- The test coverage report can be viewed from
./coverage/lcov-report/index.html
.
Back to top
Change History
- v2.7.1 (2018-01-24)
- Upgrade all packages' versions
- Fix problem with response object with retry process
- Documentation
- v2.7.0 (2017-11-20)
- Upgrade all packages' versions
- Fix Issue 12
- Fix Issue 13
- Fix Issue 15
- Lettable version of
rxjs
operators - Update tests
- Documentation
- v2.6.0 (2017-09-14)
- Upgrade all packages' versions
- Add config for
unused
packages error in compilation - Update code to use
rxjs
operators instead of manual creation - Update tests
- v2.5.0 (2017-07-18)
- Upgrade all packages' versions
- Fix Issue 11
rxjs
in peerDependencies and need to be installed manually
- v2.4.0 (2017-07-10)
- Upgrade all packages' versions
- Change
no-shadowed-variable
value in tslint
config
- v2.3.0 (2017-05-15)
- Upgrade all packages' versions
- Extended
tsconfig
files - Check file exists in packaging process
- v2.2.1 (2017-05-02)
- Upgrade all packages' versions
- Fix error handler in
getBuffer
method if no uri
provided
- v2.2.0 (2017-04-14)
- Upgrade all packages' versions
- Fix tests
- Add new method to get data with buffer response
- Export all initial elements from request to have them in library
- v2.1.1 (2017-03-23)
- v2.1.0 (2017-03-09)
- Upgrade
Request
version to v2.80.0
- v2.0.0 (2017-02-28)
- New package version for
RxJS
and Request
- Don't import all of
RxJS
, only Observable
- Rewritten all library and test files in
Typescript
- Add
typings
support - Add scope to library and move to
@akanass/rx-http-request
- v1.2.0 (2016-09-29)
- New package version for
RxJS
and Request
- New
ES6
features - Issue 1
- Issue 2
- v1.1.0 (2016-03-28)
- Browserify to have browser compatibility
- v1.0.0 (2016-03-27)
- Carefully rewritten from scratch to make Rx-Http-Request a drop-in replacement for Request
Back to top
License
Copyright (c) 2017 Nicolas Jessel Licensed under the MIT license.
Back to top